/*
 * Copyright 2011 The Rusted Roof, LLC.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package org.proteusframework.platformservice.lifecycle.api;

import org.proteusframework.core.api.model.INamespace;

import java.util.EventListener;

/**
 * Listens to lifecycle events as triggered by disparate plugins and the platform itself.
 */
public interface ILifecycleListener extends INamespace, EventListener
{
    /**
     * Lifecycle notification that the source associated in the specific context is declaring a <b>service intention</b>
     * to transition through a specific lifecycle event sequence.
     *
     * @param event Lifecycle serviceIntention event
     */
    void onLifecycleEvent(LifecycleServiceIntentionEvent event);

    /**
     * Lifecycle notification that the source associated in the specific context is declaring an <b>activity</b>
     * based event, and that the source is in the current <b>phase</b> of the event.
     *
     * @param event Lifecycle activity event
     */
    void onLifecycleEvent(LifecycleActivityEvent event);
}
